<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>1_类的基本知识</title>
</head>
<body>
	
	<script type="text/javascript">
	/**
	 * 总结：
	 * 	1. 类中的构造器不是必须写的，要对实例进行一些
	 *  
	 */
	
		//创建一个Person类
		class Person {
			//构造器方法
			constructor(name, age) {
				//构造器中的this是谁？ ----类的实例对象
			    this.name = name
				this.age = age
			}
			
			//一般方法
			speak(){
				//speak方法放在了哪里？？ speak类的原型对象上，供实例使用
				//es6模板字符串
				console.log(`我叫${this.name},我年龄是${this.age}`)
			}
			
			
		}
		//创建一个Person实例对象
		const p1 = new Person('tom',18)
		const p2 = new Person('jerry', 19)
		console.log(p1)
		console.log(p2)
		p1.speak()
		p2.speak()
		
		//call调用可以更改this的指向，，此时speak方法打印undefined
		p1.speak.call({a:1,b:2})

	
		//创建一个Student类，继承Person类
		class Student extends Person {
			constructor(name, age, grade) {
				//如果子类自定义了构造方法，必须调用super的构造器
				super(name, age)
				this.grade = grade
				this.school = '尚硅谷' //为所有实例添加一个属性
			}
			speak(){
				console.log(`我叫${this.name},我年龄是${this.age},我读的是${this.grade}年级`)
			}
			study(){
				console.log('我很努力的学习')
			}
			
		}
		const s1 = new Student('小张',15,'高一')
		console.log(s1)
		s1.speak()
		s1.study()
		
	</script>
</body>
</html>
